package com.heima.article.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.heima.article.pojo.ApArticle;
import com.heima.common.dtos.ArticleCommentPageDto;
import com.heima.model.article.dtos.ArticleDto;
import com.heima.model.article.dtos.ArticleHomeDto;
import com.heima.model.article.dtos.ArticleInfoDto;
import com.heima.model.behavior.dtos.ArticleBehaviorShowDTO;
import com.heima.model.comment.dtos.CommentPageDto;
import com.heima.model.media.dtos.WmNewsDownOrUpDTO;
import com.heima.model.media.dtos.WmNewsResultDTO;

import java.util.List;

/**
 * <p>
 * 文章信息表，存储已发布的文章 服务类
 * </p>
 *
 * @author HM
 * @since 2023-03-22
 */
public interface ApArticleService extends IService<ApArticle> {
    /**
     * 创建文章信息
     *
     * @param dto
     * @return
     */
    Long createArticle(WmNewsResultDTO dto);

    /**
     * 加载app首页文章
     *
     * @param dto
     * @return
     */
    List<ApArticle> load(ArticleHomeDto dto);

    /**
     * 加载app更多文章
     *
     * @param dto
     * @return
     */
    List<ApArticle> loadMore(ArticleHomeDto dto);

    /**
     * 加载app最新文章
     *
     * @param dto
     * @return
     */
    List<ApArticle> loadNew(ArticleHomeDto dto);

    /**
     * 根据文章id修改文章上下架状态
     * 该方法由wmNews上下架状态的监听器调用
     *
     * @param newsDownOrUpDTO
     */
    void updateIsDownById(WmNewsDownOrUpDTO newsDownOrUpDTO);

    /**
     * feign调用 分页查询文章以及文章详情信息 用于全量导入es
     *
     * @param page 页码
     * @param size 页面大小
     * @return
     */
    List<ArticleDto> findByPage(Integer page, Integer size);

    /**
     * feign远程调用 ,根据articleId查询article文章以及文章详情记录
     *
     * @param articleId
     * @return
     */
    ArticleDto findById(Long articleId);

    /**
     * 查询最近 day 天发布的文章
     *
     * @param day
     * @return
     */
    List<ApArticle> findLatestArticleByDays(long day);

    /**
     * 根据文章id从Redis中获取当前用户的行为数据
     * @param dto
     * @return
     */
    ArticleBehaviorShowDTO loadArticleBehavior(ArticleInfoDto dto);

    List<CommentPageDto> findComment(ArticleCommentPageDto dto);
}
